package com.bjc.chapter05;

/**
 * @program: jvm_demo
 * @description:
 * @author: bjc
 * @create: 2022-01-18 21:39
 */
class Father{
    public Father() {
        System.out.println("father的构造器");
    }

    public static void showStatic(String str){
        System.out.println("father"+str);
    }

    public final void showFinal(){
        System.out.println("father show final");
    }

    public void showCommon(){
        System.out.println("father 普通方法");
    }
}

public class Son extends Father{

    public Son() {
        super();
    }

    public Son(int age){
        this();
    }

    //不是重写的父类方法  因为静态方法不能被重写
    public static void showStatic(String str){
        System.out.println("son"+str);
    }

    private void showPrivate(String str){
        System.out.println("son private"+str);
    }

    public void show(){
        //invokestatic  非虚方法
        showStatic("bjc");
        //invokestatic  非虚方法
        super.showStatic("good!");
        //invokespecial 非虚方法
        showPrivate("hello!");
        //invokespecial 非虚方法
        super.showCommon();

        //invokevirtual 因为此方法生命有final，不能被子类重写，所以也认为此方法是非虚方法
        showFinal();
        //虚方法如下
        //invokevirtual
        showCommon();
        info();

        MethodInterface in = null;
        //invokeinterface
        in.methodA();
    }

    public void info(){

    }

    public void display(Father f){
        f.showCommon();
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.show();
    }
}

interface MethodInterface{
    void methodA();
}
